Walking the References

Linked List Traversal


연결리스트의 다음 원소는 인덱스로 계산하지 않는다. head에서 시작해 next를 한 번씩 따라가며 현재 노드를 옮긴다.

current지금 방문하는 노드를 가리키는 참조다.
종료 조건current is None이면 목록의 끝에 도달한 것이다.
i번째 노드head부터 next를 i번 따라가므로 Θ(1+i)다.

current가 None이 될 때까지 노드를 하나씩 방문한다

current가 한 노드 옮겨 갈 때마다 센 노드가 하나 늘고, current가 None이 되면 반복이 끝난다. 빈 리스트에서는 처음부터 current is None이다.

연결리스트 순회 상태head에서 next를 따라 current가 이동하는 과정
current = head · count = 0while current is not Nonecount += 1 · current = current.nextreturn count
원은 노드, 회색 화살표는 next 참조다. 옅은 파란 원은 이미 센 노드, 초록 테두리 원은 current가 가리키는 노드다. 아래 코드 칸에서 짙은 칸이 지금 실행하는 줄이다.
현재 상태
current 이동 횟수

배열은 인덱스가 n에 도달하면 멈추지만, 연결리스트는 current가 None인지 확인한다. 반복 한 번이 노드 하나를 방문하므로 size(head)의 비용은 Θ(n)이다.

i번째 노드에 가려면 head부터 next를 i번 따라간다

head는 바로 참조할 수 있지만, 중간 위치에는 앞선 연결을 차례로 통과해야 하므로 i가 클수록 next 이동 횟수가 늘어난다.

칸 하나가 노드 위치다. 파란 칸은 head부터 거쳐 간 노드, 초록 테두리 칸은 도달할 위치 i다.
next 이동 횟수
도달할 위치

노드의 주소가 연속적이지 않으므로 위치를 주소 계산으로 건너뛸 수 없다. head나 tail이 직접 가리키는 첫 노드와 마지막 노드에는 Θ(1)로 접근하지만, 가운데 i번째 노드는 head부터 따라가므로 Θ(1+i)다.